﻿//using System;
//using System.Web;
//using System.Web.UI;
//using System.Web.UI.WebControls;
//using System.Collections.Generic;
//using System.Collections;
//using Crosland.Sami.Core;
//using Crosland.Sami.Logic;

//namespace Crosland.Automotriz.Web
//{
//    [Serializable]
//    public class Promocion : System.Web.UI.Page
//    {
//        #region Propiedades

//        private decimal _isc;
//        private decimal _impuesto;
//        private decimal _total;
//        private decimal _subTotal;
//        //private CotizacionPedido _cabeceraPedido = new CotizacionPedido();
//        private string _mensaje;
//        private string _codEmpresa;
//        private string _codMoneda;
//        private decimal _tipCambio;
//        private string _indInverso;
//        private string _codSucursal;
//        private string _codCliente;
//        private string _codAlmacen;
//        private decimal _ImpCostoPromSoles;



//        public decimal Isc
//        {
//            get { return _isc; }
//            set { _isc = value; }
//        }

//        public decimal Impuesto
//        {
//            get { return _impuesto; }
//            set { _impuesto = value; }
//        }

//        public decimal Total
//        {
//            get { return _total; }
//            set { _total = value; }
//        }

//        public decimal SubTotal
//        {
//            get { return _subTotal; }
//            set { _subTotal = value; }
//        }

//        public string Mensaje
//        {
//            get { return _mensaje; }
//            set { _mensaje = value; }
//        }

//        public string CodEmpresa
//        {
//            get { return _codEmpresa; }
//            set { _codEmpresa = value; }
//        }

//        public string CodSucursal
//        {
//            get { return _codSucursal; }
//            set { _codSucursal = value; }
//        }

//        public string CodCliente
//        {
//            get { return _codCliente; }
//            set { _codCliente = value; }
//        }

//        public string CodAlmacen
//        {
//            get { return _codAlmacen; }
//            set { _codAlmacen = value; }
//        }

//        public string CodMoneda
//        {
//            get { return _codMoneda; }
//            set { _codMoneda = value; }
//        }

//        public decimal TipCambio
//        {
//            get { return _tipCambio; }
//            set { _tipCambio = value; }
//        }

//        public string IndInverso
//        {
//            get { return _indInverso; }
//            set { _indInverso = value; }
//        }

//        public decimal ImpCostoPromSoles
//        {
//            get { return _ImpCostoPromSoles; }
//            set { _ImpCostoPromSoles = value; }
//        }

//        public CotizacionPedido CabeceraPedido
//        {
//            get { return _cabeceraPedido; }
//            set { _cabeceraPedido = value; }
//        }


//        private Dictionary<string, CotizacionPedidoItem> _items;

//        public Promocion()
//        {
//            if (Session[DatosSesion.SesionPedido] != null)
//            {
//                _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];
//            }
//            else
//            {

//                _items = new Dictionary<string, CotizacionPedidoItem>();
//                Session[DatosSesion.SesionPedido] = _items;
//            }
//        }

//        public List<CotizacionPedidoItem> Items
//        {
//            get
//            {
//                List<CotizacionPedidoItem> list = new List<CotizacionPedidoItem>();
//                _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];
//                list.AddRange(_items.Values);

//                if (this._indInverso == Constantes.NO)
//                {
//                    list.Reverse();
//                }

//                return list;
//            }
//        }

//        public List<CotizacionPedidoItem> ListItems
//        {
//            get
//            {
//                List<CotizacionPedidoItem> Resultado = new List<CotizacionPedidoItem>();
//                _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];

//                foreach (CotizacionPedidoItem pedidoItem in _items.Values)
//                {
//                    Resultado.Add(pedidoItem);
//                }

//                return Resultado;
//            }
//        }

//        #endregion


//        #region Metodos

//        /// <summary>
//        /// Agrega un articulo al pedido retorna falso si no existe
//        /// </summary>
//        /// <param name="entity"></param>
//        public bool AddItem(CotizacionPedidoItem entity)
//        {
//            bool flag = true;

//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];
//            if (_items.ContainsKey(entity.CodArticuloServ))
//            {
//                CotizacionPedidoItem item = _items[entity.CodArticuloServ];

//                item.ImpCantidad += entity.ImpCantidad;
//                item.ImpCantidadOrig = item.ImpCantidad;
//                item.ImpBrutoTot = item.ImpCostoPromSoles * item.ImpCantidad;
//                item.ImpImpuestoTot = item.ImpImpuestoUni * item.ImpCantidad;
//                item.ImpDescTot = item.ImpDescuento * item.ImpCantidad;
//                item.ImpIscTot = item.ImpIscUni * item.ImpCantidad;
//                item.ImpNetoUni = item.ImpBrutoUni - item.ImpDescuento;
//                item.ImpNetoTot = item.ImpNetoUni * item.ImpCantidad;
//                item.CanDisponible = entity.CanDisponible;
                

//            }
//            else
//            {
//                entity.ImpBrutoTot = entity.ImpCostoPromSoles * entity.ImpCantidad;
//                entity.ImpImpuestoTot = entity.ImpImpuestoUni * entity.ImpCantidad;
//                entity.ImpDescTot = entity.ImpDescuento * entity.ImpCantidad;
//                entity.ImpIscTot = entity.ImpIscUni * entity.ImpCantidad;
//                entity.ImpNetoUni = entity.ImpBrutoUni - entity.ImpDescuento;
//                entity.ImpNetoTot = entity.ImpNetoUni * entity.ImpCantidad;
//                entity.CanDisponible = entity.CanDisponible;

//                _items.Add(entity.CodArticuloServ, new CotizacionPedidoItem(entity));
//                flag = false;

//            }
//            Session[DatosSesion.SesionPedido] = _items;

//            return flag;
//        }


//        /// <summary>        
//        /// Eliminar un item del pedido
//        /// </summary>
//        public void DeleteItem(string codArticuloServ)
//        {
//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];
//            if (_items.ContainsKey(codArticuloServ))
//            {
//                _items.Remove(codArticuloServ);
//            }
//            Session[DatosSesion.SesionPedido] = _items;
//        }


//        /// <summary>
//        /// Limpia los items del pedido
//        /// </summary>
//        public void Limpiar()
//        {
//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];
//            _items.Clear();
//            Session[DatosSesion.SesionPedido] = _items;
//        }


//        /// <summary>
//        /// Calcula los montos e impuestos totales
//        /// </summary>
//        public void CalcularTotales()
//        {
//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];
//            _isc = _impuesto = _total = 0;

//            foreach (CotizacionPedidoItem p in _items.Values)
//            {
//                _isc = _isc + p.ImpIscTot;
//                _impuesto = _impuesto + p.ImpImpuestoTot;
//                _subTotal = _subTotal + p.ImpBrutoTot;
//            }

//            _total = _subTotal + _impuesto + _isc;

//        }

//        /// <summary>
//        /// Permite actualizar los precios de los artículos del pedido
//        /// </summary>
//        public void ActualizarPrecios()
//        {
//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];

//            foreach (CotizacionPedidoItem cotizacionItem in _items.Values)
//            {
//                (new PedidoLogic(this.CodEmpresa)).ActualizarPrecioArticulo(cotizacionItem,
//                    this.CodCliente, this.CodAlmacen, this.CodMoneda, this.TipCambio);
//            }

//            Session[DatosSesion.SesionPedido] = _items;
//        }


//        /// <summary>
//        /// Actualiza los datos de la grilla de pedidos que es pasada como parametro
//        /// </summary>
//        /// <param name="gv"></param>
//        public bool ActualizarDatos(GridView gv)
//        {
//            bool flag = true;

//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];
//            decimal factor = 1;

//            foreach (GridViewRow row in gv.Rows)
//            {
//                string codArticuloServ = ((Label)row.FindControl(NombreControl.LblCodigo)).Text;
//                //string codAlmacen = ((DropDownList)row.FindControl(NombreControl.DdlAlmacen)).SelectedValue;
//                string cantidad = ((TextBox)row.FindControl(NombreControl.TxtCantidad)).Text;
//                string cantidadOrig = ((TextBox)row.FindControl(NombreControl.TxtCantidadOrig)).Text;
//                //string codTipoProm = ((DropDownList)row.FindControl(NombreControl.DdlTipoProm)).SelectedValue;
//                //string indNroSerie = ((LinkButton)row.FindControl(NombreControl.LbNroSerie)).Text;
//                int impCantidad = (!string.IsNullOrEmpty(cantidad)) ? int.Parse(cantidad) : 0;
//                int impCantidadOrig = (!string.IsNullOrEmpty(cantidadOrig)) ? int.Parse(cantidadOrig) : 0;
//                string stock = ((LinkButton)row.FindControl(NombreControl.LbStockAlm)).Text;

//                int stk = 0;
//                if (int.TryParse(stock, out stk))
//                {
//                    if (stk == 0)
//                        row.CssClass = EstilosPagina.CssGrillaStock;
//                }

//                //En caso de que la cantidad sea cero lo eliminamos del pedido
//                //if (impCantidad == 0) this.DeleteItem(codArticuloServ);

//                //else
//                //{
//                CotizacionPedidoItem cotizacion = _items[codArticuloServ];

//                //Actualizando los datos de la grilla                                         
//                //if (cotizacion.CodAlmacen != codAlmacen)
//                //{
//                //    cotizacion.ImpStockAlm = (new PedidoLogic(this.CodEmpresa)).ObtenerStockVenta(cotizacion.CodFamilia,
//                //        cotizacion.CodArticuloServ, codAlmacen, cotizacion.CodUniMedida, cotizacion.CodTipoMedida);
//                //    cotizacion.CodAlmacen = codAlmacen;
//                //}

//                //Cambiando los montos en base a las monedas
//                if (!string.IsNullOrEmpty(this.CodMoneda))
//                {
//                    if (this.CodMoneda != cotizacion.CodMoneda)
//                    {
//                        factor = (this.CodMoneda == Constantes.MonedaSoles) ? 1 * this.TipCambio : 1 / this.TipCambio;
//                        cotizacion.CodMoneda = this.CodMoneda;
//                    }
//                }

//                //Verificando que la cantidad no exceda la cantidad original
//                //if (cotizacion.ImpCantidad != impCantidad)
//                //{
//                //    if (impCantidad > impCantidadOrig)
//                //    {
//                //        cotizacion.ImpCantidad = impCantidadOrig;
//                //        flag = false;
//                //    }
//                //    else
//                //    {
//                //        cotizacion.ImpCantidad = impCantidad;
//                //    }
//                //}
//                //else
//                //{
//                //    cotizacion.ImpCantidad = impCantidad;
//                //}


//                /////Tratando las cantidades originales y cantidades aprobadas
//                //if (cotizacion.ImpCantidadOrig != impCantidadOrig)
//                //{
//                //    cotizacion.ImpCantidadOrig = impCantidadOrig;
//                //    cotizacion.ImpCantidad = impCantidadOrig;
//                //}

//                cotizacion.ImpCantidadOrig = impCantidadOrig;
//                cotizacion.ImpCantidad = impCantidad;
//                //cotizacion.ImpCantDe=

//                cotizacion.ImpBrutoUni = cotizacion.ImpCostoPromSoles * factor;
//                cotizacion.ImpBrutoTot = cotizacion.ImpCostoPromSoles * cotizacion.ImpCantidad;
//                cotizacion.ImpImpuestoUni = cotizacion.ImpImpuestoUni * factor;
//                cotizacion.ImpImpuestoTot = cotizacion.ImpImpuestoUni * cotizacion.ImpCantidad;
//                cotizacion.ImpDescuento = cotizacion.ImpDescuento * factor;
//                cotizacion.ImpDescTot = cotizacion.ImpDescuento * cotizacion.ImpCantidad;
//                cotizacion.ImpIscUni = cotizacion.ImpIscUni * factor;
//                cotizacion.ImpIscTot = cotizacion.ImpIscUni * cotizacion.ImpCantidad;
//                cotizacion.ImpNetoUni = cotizacion.ImpBrutoUni - cotizacion.ImpDescuento;
//                cotizacion.ImpNetoTot = cotizacion.ImpNetoUni * cotizacion.ImpCantidad;
//                //}
//            }

//            Session[DatosSesion.SesionPedido] = _items;
//            return flag;
//        }


//        /// <summary>
//        /// Actualiza los número de serie ingresados por cada articulo
//        /// </summary>
//        /// <param name="codArticuloServ"></param>
//        /// <param name="listNroSerie"></param>
//        public void ActualizarNroSerie(string codArticuloServ, List<NroSerie> listNroSerie)
//        {
//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];

//            if (_items.ContainsKey(codArticuloServ))
//            {
//                _items[codArticuloServ].ListNroSerie = listNroSerie;
//            }

//            Session[DatosSesion.SesionPedido] = _items;
//        }


//        /// <summary>
//        /// Obtiene los número de serie de un determinado item del pedido
//        /// </summary>
//        /// <param name="codArticuloServ"></param>
//        /// <returns></returns>
//        public List<NroSerie> GetNrosSerie(string codArticuloServ)
//        {
//            _items = (Dictionary<string, CotizacionPedidoItem>)Session[DatosSesion.SesionPedido];

//            if (_items.ContainsKey(codArticuloServ))
//            {
//                return _items[codArticuloServ].ListNroSerie;
//            }
//            return null;
//        }


//        /// <summary>
//        /// Marca los campos de los artículos que no tienen stock
//        /// </summary>
//        /// <param name="gv"></param>
//        /// <param name="codigos"></param>
//        public void IndicarStockDìsponible(GridView gv, List<string> codigos)
//        {
//            foreach (GridViewRow row in gv.Rows)
//            {
//                string codArticuloServ = ((Label)row.FindControl(NombreControl.LblCodigo)).Text;

//                if (codigos.Contains(codArticuloServ))
//                {
//                    row.CssClass = EstilosPagina.CssGrillaStock;
//                }
//                else
//                {
//                    row.CssClass = EstilosPagina.CssGrillaNormal;
//                }
//            }
//        }


//        #endregion


//    }


//}